import { defineStore } from "pinia";
const useUserStore = defineStore("tagsView", {
  // options
  state: () => ({
    tags: [],
    cacheTags: [],
  }),
  // 方法：同步和异步
  // 缓存:  tags中添加数据时 将带有meta/keepAlive为true的name [name尽量和组件的name保持一致]缓存的到 cacheTags中去layout的keep-alive中去使用
  actions: {
    setCacheTags() {
      console.log("我是缓存的方法", this.tags);
      this.cacheTags = this.tags
        .filter((item) => item.isKeepAlive)
        .map((item) => item.comName);
    },
    // 初始化数据 - 获取固定值的路由信息替换到这里去
    initTags(tags) {
      // 初始获取数据成员判断操作
      this.tags = tags;
      this.setCacheTags();
    },
    // 增
    addTag(item) {
      const { path } = item;
      const flag = this.tags.map((item) => item.path).includes(path);
      if (flag) return;
      this.tags.push(item);
      this.setCacheTags();
    },
    // 删
    remove(index) {
      // 删除state中的某个成员
      this.tags.splice(index, 1);
      this.setCacheTags();
    },
    // 删除其他
    removeOther(index) {
      if (isNaN(index)) return;
      // 删除数组:  方案1：正向删除记得回退操作
      // 方案2： 倒着删除
      // 注意:  this.tags.length不能存储到外面，因为每次循环 之后数组长度发生变化
      for (let i = 0; i < this.tags.length; i++) {
        const item = this.tags[i];
        console.log(item);
        if (item.isAffix || index === i) {
          continue;
        }
        this.tags.splice(i, 1);
        i--;
      }
      this.setCacheTags();
    },
    // 删除所有 (除过固定)
    removeAll() {
      // 删除数组:  方案1：正向删除记得回退操作
      // 方案2： 倒着删除
      for (let i = this.tags.length - 1; i >= 0; i--) {
        const item = this.tags[i];
        if (item.isAffix) {
          return;
        }
        this.tags.splice(i, 1);
      }
      this.setCacheTags();
    },
  },
});

export default useUserStore;
